#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 9


int mat[N][N];


void menu1()
    {
    printf("      ================================================================ \n");
    printf("     | tapez N |               Nouveau jeu                            |\n");
    printf("     |----------------------------------------------------------------|\n");
    printf("     | tapez C |               Charger jeu                            |\n");
    printf("     |----------------------------------------------------------------|\n");
    printf("     | tapez S |               Voir scores                            |\n");
    printf("     |----------------------------------------------------------------|\n");
    printf("     | tapez Q |               Quitter jeu                            |\n");
    printf("      ================================================================ \n");
}


void menu2()
                 {printf("\n");
                 printf("\n");
                 printf("\n");

                 printf("          **********************************************************\n");
                 printf("          ** tapez D  **           difficile                      **\n");
                 printf("          **********************************************************\n");
                 printf("          ** tapez M  **             moyen                        **\n");
                 printf("          **********************************************************\n");
                 printf("          ** tapez F  **             facile                       **\n");
                 printf("          **********************************************************\n");

                 printf("\n");
                 printf("\n");
                 printf("\n");
                 }
void lire_fich()
{
    FILE *fichier;
    int c=0;
    fichier = fopen("C:\\Marouen cours\\marr.txt","r");
     if (!fichier){
                       printf ("Impossible d'ouvrir le fichier");
                       getch();
                       exit(1);}
                    else
    {
        c = fgetc(fichier);
	while (c != EOF)
	{
	    printf("%c", c);
  	    c = fgetc(fichier);
	}

	fclose(fichier);
    }
}


void afficher()
{
	int i, j;
	int k;
	printf("\n");
	for( i=0; i<9; i++ )
	{
		for(k=0; k <4*9; k++ )
		{
			printf("-");
		}
		printf("\n|");
		for( j=0; j<9; j++ )
		{
				printf(" %d |", mat[i][j]);
		}
		printf("\n");
	}
	for(k=0; k<4*9; k++ )
	{
		printf("-");
	}
	printf("\n");
}
void lireValeur( int *nLigne, int *nCol, int *valeur )
{
	int i=0;
	do{
		if( i != 0 ){
			printf("La valeur ou les coordonnées sont incorrects\n"
					"Veuillez recommercer\n");
		}
		printf("Entre le numero de ligne : ");
		scanf("%d", nLigne);
		printf("Entre le numero de colonne : ");
		scanf("%d", nCol);
		printf("Entre la valeur : ");
		scanf("%d", valeur);
		i=1;
	}while( !((*nLigne>= 0 && *nLigne<10) && (*nCol>= 0 && *nCol<10)
			&& (*valeur> 0 && *valeur<=10)));
}

int verifierLigne(int nLigne, int valeur )
{
	int j, mat[9][9];

	for( j=0; j<9; j++ )
	{
		if( mat[nLigne][j] == valeur )
		{
			return 0;
		}
	}
	return 1;
}

int verifierColonne( int nCol, int valeur )
{
	int i=0,mat[9][9];

	for( i=0; i<9; i++ )
	{
		if( mat[i][nCol] == valeur )
		{
			return 0;
		}
	}
	return 1;
}

int verifierCarre(int nLigne, int nCol, int valeur )
{
	int i=0,mat[9][9];
	int j=0;
	int R = nLigne/3;
	int C = nCol/3;

	for( i=R; i<R+3; i++ )
	{
		for( j=C; j<C+3; j++ )
		{
			if( mat[i][j] == valeur )
			{
				return 0;
			}
		}
	}
	return 1;}

int	 update( int nLigne, int nCol, int valeur )
{
    int mat[9][9];
	if( verifierColonne(nCol, valeur)	||
		verifierLigne  (nLigne, valeur) ||
		verifierCarre  (nLigne, nCol, valeur) )
	{
		mat[nLigne][nCol] = valeur;
		return 1;
	}
	return 0;
}


int main()
{
    int mat[9][9]={
{1,0,0,0,5,6,7,8,9},
{0,5,6,7,0,0,0,2,3},
{7,0,9,0,2,3,0,5,6},
{0,3,1,0,7,5,6,9,4},
{6,7,0,9,0,0,5,0,8},
{0,9,5,3,6,4,0,1,7},
{3,0,7,5,4,0,9,0,8},
{0,6,5,0,9,7,0,4,1},
{9,0,8,0,0,1,5,0,2}};

    FILE *fichier1;
    int i=0,c;
    int j=0,ret;
    int retour,k;
    int nLigne, nCol;
	int valeur;
	char rep,rep2;
	int x,y,carre;
	for( i=0; i<9; i++ )
	{
		for(k=0; k <4*9; k++ )
		{
			printf("=");
		}
		printf("\n|");
		for( j=0; j<9; j++ )
		{
				if(mat[i][j]!=0)
    printf(" %d |",mat[i][j]);
    else
    printf("   |");
		}
		printf("\n");
	}
	for(k=0; k <4*9; k++ )
		{
			printf("=");
		}
    printf("\n\n");
do{
    fichier1 = fopen("C:\\Marouen cours\\sudoku.txt","w");
     if (!fichier1){
                       printf ("Impossible d'ouvrir le fichier");
                       getch();
                       exit(1);}
        else


        {lireValeur( &nLigne, &nCol, &valeur );
        ret = update( nLigne, nCol, valeur );}
        if( ret == 1 )
		mat[nLigne-1][nCol-1]=valeur;

for( i=0; i<9; i++ )
	{
		for(k=0; k <4*9; k++ )
		{
			fprintf(fichier1,"=");
		}
		fprintf(fichier1,"\n|");
		for( j=0; j<9; j++ )
		{
				if(mat[i][j]!=0)
    fprintf(fichier1," %d |",mat[i][j]);
    else
    fprintf(fichier1,"   |");
		}
		fprintf(fichier1,"\n");
	}
	for(k=0; k <4*9; k++ )
		{
			fprintf(fichier1,"=");
		}
    fprintf(fichier1,"\n\n");
                    fclose(fichier1);

    for( i=0; i<9; i++ )
	{
		for(k=0; k <4*9; k++ )
		{
			printf("=");
		}
		printf("\n|");
		for( j=0; j<9; j++ )
		{
				if(mat[i][j]!=0)
    printf(" %d |",mat[i][j]);
    else
    printf("   |");
		}
		printf("\n");
	}
	for(k=0; k <4*9; k++ )
		{
			printf("=");
		}
    printf("\n\n");

    printf("\n");

    printf("voulez vous continuer O/N ?\n");
    getchar();
    scanf("%c",&rep);
    if((rep=='n')||(rep=='N'))
    {retour=1;
    printf("sauver le jeux ou Quitter?\n");
    printf("tapez S ou Q\n");
    scanf("%c",rep2);
    }
    }
while(((rep=='o')||(rep=='O'))&&(retour!=1));

    getch();
    return 0;
}
